/* 
 * File:   Actor.h
 * Author: 75.02 - Grupo 7, 2do cuatrimestre 2012.
 *
 * Created on 31 de octubre de 2012, 18:47
 */

#ifndef ACTOR_H
#define	ACTOR_H

#include <string>
#include "Trayectoria.h"
#include "IDesplazable.h"
#include "Rol.h"
#include "IColisionante.h"
#include "IColisionado.h"
#include "ISerializable.h"

#include "ActoresConstantes.h"

using namespace std;
using namespace TP::Serializacion;
using namespace TP::Juego::Arena;
using namespace TP::Juego::Motorizacion::Fisica;
using namespace TP::Juego::Motorizacion::Colisiones;


namespace TP { namespace Juego { namespace Arena { namespace Actores {

class Actor : public IDesplazable, public IColisionante, public IColisionado, public ISerializable {

public:
    
    Actor ();
    
    Actor(const string& pNombre, Rol* pRol);
    
    virtual ~Actor();
    
    string& Nombre();
    
    Trayectoria* getTrayectoria ();
    
    Trayectoria* setTrayectoria (Trayectoria* pTrayectoria);
    
    Ticks desplazar(Ticks pTiempo);
    
    Rol* getRol (); 
    
    virtual string aXML() = 0;
    
    virtual string aXML(const string& pPath) = 0;
    
    virtual void parseXML (const string& pDescriptor) = 0;
    
    virtual TiXmlElement* aElementoXML () = 0;
    
    virtual void deElementoXML (TiXmlElement* pElemento) = 0; 
    
    static Actor* deElementoXMLGenerico (TiXmlElement* pElemento);
    
    // Retorna la vida del actor.
    double getVida();
    
    // Setea la vida del actor.
    void setVida(double vida);
    
    // Pone a 0 la vida del actor.
    void destruir();
    
    // Disminuye la vida del actor en una cantidad = a cant.
    virtual double decrementarEnergia (double pCantidadEnergia);

protected:
    string& setNombre (const string& pNombre);
    
private:
    string _nombre;
    Rol* _rol;
    Trayectoria* _trayectoria;
    double _vida;
};
    
}}}}

#endif	/* ACTOR_H */

